home *** CD-ROM | disk | FTP | other *** search
- package koala.dynamicjava.interpreter.modifier;
-
- import java.lang.reflect.Array;
- import java.util.LinkedList;
- import java.util.List;
- import koala.dynamicjava.interpreter.context.Context;
- import koala.dynamicjava.tree.ArrayAccess;
- import koala.dynamicjava.tree.visitor.Visitor;
-
- public class ArrayModifier extends LeftHandSideModifier {
- protected ArrayAccess node;
- protected Object array;
- protected Number cell;
- protected List arrays = new LinkedList();
- protected List cells = new LinkedList();
-
- public Object prepare(Visitor var1, Context var2) {
- this.arrays.add(0, this.array);
- this.cells.add(0, this.cell);
- this.array = this.node.getExpression().acceptVisitor(var1);
- Object var3 = this.node.getCellNumber().acceptVisitor(var1);
- if (var3 instanceof Character) {
- var3 = new Integer((Character)var3);
- }
-
- this.cell = (Number)var3;
- return Array.get(this.array, this.cell.intValue());
- }
-
- public void modify(Context var1, Object var2) {
- try {
- Array.set(this.array, this.cell.intValue(), var2);
- } catch (IllegalArgumentException var8) {
- if (var8.getMessage().equals("array element type mismatch")) {
- throw new ArrayStoreException();
- }
-
- throw var8;
- } finally {
- this.array = this.arrays.remove(0);
- this.cell = (Number)this.cells.remove(0);
- }
-
- }
-
- public ArrayModifier(ArrayAccess var1) {
- this.node = var1;
- }
- }
-